/**
 * Copyright (C) 2013-2014 the original author or authors.
 */
package com.foreveross.bsl.comments.application;

import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.springframework.data.domain.Page;

import com.foreveross.bsl.comments.application.vo.CommentFeedbackVo;
import com.foreveross.bsl.comments.application.vo.CommentVo;
import com.foreveross.bsl.common.utils.web.QuerySpecs;

/**
 * 意见服务接口
 * 
 * @author Wangyi
 * @version v1.0
 * 
 * @date 2013-7-17
 * 
 */
@Produces({ MediaType.APPLICATION_JSON})
@Consumes({ MediaType.APPLICATION_JSON})
@Path("comment")
public interface CommentService {
	
	@POST
	void addComment(CommentVo comment);
	
	@POST
	@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	void addComment(@FormParam("comment") String comment, @FormParam("type") String type, 
			@FormParam("loginName") String loginName, @FormParam("appKey") String appKey);
	
	@POST
	@Path("feedback/add")
	void addFeedback(CommentFeedbackVo commentFeedbackVo);
	

	@POST
	@Path("feedback")
	@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	void feedbackComment(@FormParam("commentId") String commentId, @FormParam("content") String content, 
			@FormParam("loginName") String loginName);

	@DELETE
	@Path("{id}")
	void deleteComment(@PathParam("id") String commentId);
	
	@GET
	@Path("{id}")
	CommentVo getById(@PathParam("id") String commentId);
	
	@GET
	@Path("find/{pageNumber}/{pageSize}")
	Page<CommentVo> findComments(@PathParam("pageNumber") int pageNumber, 
			@PathParam("pageSize") int pageSize, 
			@QueryParam("q") QuerySpecs querySpecs);

	@GET
	@Path("find/{commentId}/{pageNumber}/{pageSize}")
	Page<CommentFeedbackVo> findCommentFeedbacks(@PathParam("commentId") String commentId, 
			@PathParam("pageNumber") int pageNumber, @PathParam("pageSize")int pageSize, 
			@QueryParam("q") QuerySpecs querySpecs);
	
	/**
	 * 取得该租户下的所有意见反馈
	 * @param status
	 * @param hirerName
	 * @return
	 */
	@POST
	@Path("syn")
	List<CommentVo> findAllCommentByCommentStatus(@QueryParam("commentStatus") String status,@QueryParam("hirerName") String hirerName);
	
	/**
	 * 根据租户名和appKey取得意见反馈
	 * @param status
	 * @param hirerName
	 * @param appKey
	 * @return
	 */
	@POST
	@Path("synByIdentifier")
	List<CommentVo> findAllCommentByCommentStatusAndAppKey(@QueryParam("commentStatus") String status,@QueryParam("hirerName") String hirerName,@QueryParam("appKey") String appKey);
	
	@POST
	@Path("feedbacks")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	void updateComments(List<CommentVo> commentVos,@QueryParam("hierName") String hierName);
	
	@PUT
	@Path("update")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	CommentVo updateEntity(CommentVo entity);

	/** --------- 客户端访问接口  ------------*/
	/**
	 * 客户端创建回复接口
	 * @param commentId
	 * @param content
	 * @param feedbackor
	 */
	@GET
	@Path("app/feedback/add")
	void addFeedback(@QueryParam("commentId") String commentId,@QueryParam("content") String content,@QueryParam("feedbackor") String feedbackor);
	/**
	 * 按反馈ID查询反馈回复
	 * @param commentId
	 * @return
	 */
	@GET
	@Path("app/feedbacks/{commentId}")
	List<CommentFeedbackVo> findCommentFeedbacks(@PathParam("commentId") String commentId);
	
	/**
	 * 分页查询反馈
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	@GET
	@Path("app/comment")
	Page<CommentVo> findComments(@QueryParam("appKey") String appKey,@QueryParam("pageNumber") int pageNumber, @QueryParam("pageSize") int pageSize);

}
